4.1 Debug Mode

4.1调试模式 调试模式是一种特殊的处理器模式,仅在hart被停止进行外部调试时使用。 这里没有指定调试模式的实现方式。

当从可选的程序缓冲区执行代码时,hart保持在调试模式,并应用以下方法:
1. 
所有的操作都在机器模式特权级别执行,除了mstatus中的MPRV可以根据mprven被忽略。
2. 
所有中断(包括NMI)都被屏蔽。
3.
异常不会更新任何寄存器。
这包括cause, epc, tval, dpc和mstatus。
他们结束程序缓冲区的执行。
4. 
如果触发器匹配,则不采取任何操作。
5. 
计数器可能被停止,这取决于dcsr中的停止计数。
6. 
计时器可能被停止,这取决于dcsr中的停止时间。
7. 
wfi指令充当nop。
8. 
几乎所有改变特权级别的指令都有未定义的行为。
这包括call, mret, sret和uret。
(要改变特权级别,调试器可以在dcsr中写入prv)。
唯一的例外是ebreak。
当它在调试模式下执行时,它再次停止hart,但不更新dpc或dcsr。
9. 
完成程序缓冲区执行被认为是栅栏指令的输出。
10. 
所有的控制传输指令都可以作为非法指令,如果它们的目的地在程序缓冲区中。
如果其中一条指令是非法指令,那么所有指令都是非法指令
必须作为非法指令。
11. 
所有的控制转移指令,如果它们的目的地在外部,都可能成为非法指令
程序缓冲区。
如果其中一条指令是非法指令,那么所有指令都是非法指令
必须作为非法指令。
12. 
依赖于PC的值的指令(例如auipc)可能作为非法指令。
13. 有效的XLEN是DXLEN。
一般情况下,调试器应该能够模拟MPRV的所有效果。
一个例外
是Sv32系统的情况,需要MPRV功能,以访问34位物理
地址。
其他系统可能会将mprven与0绑定。